const loadList = {
	data() {
		return {
			api: "", // 表格接口地址
			page: 1, // 当前页数
			pageSize: 10, // 每页显示条目个数
			loadParams: {}, // 其他请求参数，一般为查询条件
			sortParams: {}, // 排序参数
			tableData: {
				list: [], // 表格数据
				pagination: {
					total: 0, // 总条目数
				},
			},
			loading: false, // 加载中
		};
	},
	methods: {
		/**
		 * @description 表格数据请求
		 * @param {function} cb - 接口回调
		 */
		async loadListFn(cb) {
			if (!this.api) {
				return console.error("loadListFn", "未设置表格接口地址");
			}
			const params = Object.assign(
				{
					pageIndex: this.page,
					pageSize: this.pageSize,
				},
				this.loadParams,
				this.sortParams
			);
			this.loading = true;
			this.$axios
				.post(this.api, params)
				.then((res) => {
					this.loading = false;
					if (cb && typeof cb === "function") {
						return cb.call(this, res);
					}
					this.tableData.list = res.list;
					this.tableData.pagination = res.page;
				})
				.catch(() => {
					this.loading = false;
				});
		},
		/**
		 * @description 条件查询，一般 @change="onSearch" 的方式使用
		 * searchCb 方法用于筛选时时额外的逻辑处理
		 */
		onSearch() {
			this.page = 1;
			// 筛选处理方法
			this.searchCb && this.searchCb();
			this.loadListFn();
		},

		/**
		 * @description 清除筛选项
		 * clearCb 方法用于清除时额外的逻辑处理
		 */
		clearSearch() {
			this.page = 1;
			this.loadParams = {};
			// 清除筛选方法
			this.clearCb && this.clearCb();
			this.loadListFn();
		},

		/**
		 * @description 改变排序方式
		 * @param {object} event - el-table @sort-change方法返回的参数
		 * @param {object} event.column - 其他
		 * @param {string} event.prop - 排序的列，根据哪个参数排序
		 * @param {string} event.order - 排序方式，升序ascending 和 降序descending
		 */
		onSortChange({ column, prop, order }) {
			if (order) {
				this.sortParams = {
					order_by: prop,
					direction: order === "descending" ? "desc" : "asc",
				};
			} else {
				this.sortParams = {};
			}
			this.loadListFn();
		},
		/**
		 * @description 改变当前分页页数，或改变显示条数
		 * @param {string} value - 数值
		 * @param {string} type - 分页显示方式，改变页数page 和 改变条目数size
		 */
		onPageChange(value, type) {
			if (type === "page") {
				this.page = value;
			} else {
				this.pageSize = value;
			}
			this.loadListFn();
		},
	},
};
export default loadList;
